﻿using DotNetCore.CAP;

namespace ZhonTai.Api.Rpc.EventBus;

public class CapPublisher: IEventPublisher
{
    private readonly ICapPublisher _eventBus;

    public CapPublisher(ICapPublisher capPublisher)
    {
        _eventBus = capPublisher;
    }

    public virtual async Task PublishAsync<T>(T eventObj, string? callbackName = null, CancellationToken cancellationToken = default) where T : class
    {
        await _eventBus.PublishAsync(typeof(T).Name, eventObj, callbackName, cancellationToken);
    }

    public virtual async Task PublishAsync<T>(T eventObj, IDictionary<string, string?> headers, CancellationToken cancellationToken = default) where T : class
    {
        await _eventBus.PublishAsync<T>(typeof(T).Name, eventObj, headers, cancellationToken);
    }

    public virtual void Publish<T>(T eventObj, string? callbackName = null) where T : class
    {
        _eventBus.Publish(typeof(T).Name, eventObj, callbackName);
    }

    public virtual void Publish<T>(T eventObj, IDictionary<string, string?> headers) where T : class
    {
        _eventBus.Publish(typeof(T).Name, eventObj, headers);
    }
}
